#include <mips/regdef.h>
#include <sys/syscall.h>

# Programa que calcula y devuelve el maximo comun 
# divisor entre dos numeros ingresados por parametro.

# Uso de registros:
# 	$2 ($v0)	almacenara el resultado.
#	$4 ($a0)	contiene el primer parametro.
#	$5 ($a1)	contiene el segundo parametro.
#	$8 ($t0)	temporal.
#	$9 ($t1)	temporal.
#	$10 ($t2)	temporal.

	.globl 		mcd
	.ent 		mcd 2
mcd:
	subu		sp, sp, 24
	sw		$fp, 20(sp)		# es una función leaf: no guarda el ra
	sw		gp, 16(sp)
	move		$fp, sp
	sw		a0, 0($fp)		# guarda los atributos
	sw		a1, 4($fp)
	
	.frame		sp, 24, ra
	move		t0, a0			# almacena el primer parametro.
	move		t1, a1			# almacena el segundo.
loop:
	div		t0, t1			# carga en Hi el resultado de $8 mod $9.
	mfhi		t2			# mueve el contenido en Hi al reg $10.
	bne		t2, zero, start

	move		sp, $fp			# destruyo el stack
	lw		$fp, 20(sp)
	lw		gp, 16(sp)
	addu		sp, sp, 24
	move		v0, t1
	j		ra
start:
	move		t0, t1
	move		t1, t2
	b		loop

	.end 		mcd
